package mil.af.amc.adpetracker.service;

import mil.af.amc.adpetracker.model.HandReceipt;
import mil.af.amc.adpetracker.model.AdpeAccount;
import mil.af.amc.adpetracker.model.User;

import java.util.List;
import java.util.Map;


/**
 * Interface for the HandReceiptService
 *
 * @author TSgt Ferguson
 */
public interface HandReceiptService {

    /**
     * Retrieve ALL handreceipts
     *
     * @return  a List of all current HandReceipts
     */
    List<HandReceipt> getAll();

    /**
     * Retrieve all handreceipt objects for a given AdpeAccount
     *
     * @param adpeAccountId int representing the unique id of the AdpeAccount
     * @return  a List of all HandReceipt objects associated with the given AdpeAccount
     */
    List<HandReceipt> getAllByAdpeAccount(int adpeAccountId);

    /**
     * Retrieve all handreceipt objects for a given AdpeAccount
     *
     * @param adpeAccount   an AdpeAccount object
     * @return  a List of all HandReceipt objects associated with the given AdpeAccount
     */
    List<HandReceipt> getAllByAdpeAccount(AdpeAccount adpeAccount);

    /**
     * Retrieve all HandReceipt objects for a given User
     *
     * @param userId
     * @return  a List of all HandReceipt objects associated with the given User
     */
    List<HandReceipt> getAllByUser(int userId);

    List<HandReceipt> getAllByUser(User user);

    HandReceipt getById(int handReceiptId);

    HandReceipt createHandReceipt(Map map) throws ServiceException;

    HandReceipt editHandReceipt(Map map) throws ServiceException;

    void deleteHandReceipt(int handReceiptId) throws ServiceException;

    void closeHandReceipt(int handReceiptId) throws ServiceException;
}
